草庐IT

c++ - RAII 和 C++ STL

全部标签

c++ - STL vector 分配与插入

我理解这两个操作的语义,在替换为提供的值之前分配-删除。insert-在指定位置插入值(必要时分配新内存)。除此之外,还有什么理由比另一个更受欢迎?或者换句话说,有什么理由使用赋值而不是插入。 最佳答案 assign和insert仅当vector开始时​​为空时才等效。如果vector已经为空,那么最好使用assign,因为insert会错误地向读者暗示存在要保留的现有元素。 关于c++-STLvector分配与插入,我们在StackOverflow上找到一个类似的问题:

c++ - STL算法全部还是任意函数?

作为STL的一部分,是否有任何近似于Haskell的所有或任何函数的东西?如果不是,下面是一个很好的实现吗(我注意到如果迭代器是随机访问,sgiSTL会执行部分特化,尽管我没有为此烦恼)?templateinlineboolall(InputIteratorfirst,InputIteratorlast,Predicatepred){while(first!=last){if(!pred(*first)){returnfalse;}++first;}returntrue;}同样,如何最好地将其转换为迭代两个序列,并在BinaryPredicate对所有序列返回true的情况下返回tru

c++ - 这是糟糕的 RAII 设计吗?

我有Java背景,但后来我学习了C++,现在已经用它编程了几年(主要是调试和编写修复程序,而不是从头开始设计程序)。然而,我今天遇到了一个问题,坦率地说,我有点惊讶花了这么长时间才发现它。假设我有一个名为Class1的类,其头文件包含(以及其他代码):classClass1{private:Class2object;}Class2类没有指定默认构造函数。现在,在Class1构造函数中,我正在读取文件的二进制头并使用我从中解析的信息来初始化Class2,如下面的伪代码所示:Class1::Class1(std::string){//Readsomebinaryinfofromafileh

c++ - 对于以下情况,STL map 或 unordered_map 哪个更好

我正在尝试比较某些操作的STLmap和STLunordered_map。我在网上查看,这只会增加我对整体上哪个更好的怀疑。所以我想根据它们执行的操作来比较两者。哪个表现更快插入、删除、查找哪一个占用更少的内存和更少的时间从内存中清除它。任何解释都热烈欢迎!!!提前致谢 最佳答案 WhichoneperformsfasterinInsert,Delete,Look-up?Whichonetakeslessmemoryandlesstimetoclearitfromthememory.Anyexplanationsareheartily

c++ - 通过常量迭代器从 STL 容器中删除

根据C++referenceSTL容器已在C++11标准中修复,以在erase方法中采用常量迭代器。以下代码无法在启用c++0x的g++4.7中编译。#includeintmain(){std::vectorvector;vector.push_back(0);std::vector::const_iteratorvectorItr=vector.begin();vector.erase(vectorItr);}显然新的签名没有实现。有没有什么时候解决这个问题的信息?我在C++0x/C++11SupportinGCC中找不到任何相关信息文章。 最佳答案

c++ - 哪个先执行,RAII还是函数返回值

MyClass有一个成员函数需要返回它的成员变量,并且该函数必须是线程安全的,因此我使用互斥锁来保护数据。我有两个实现如下:版本1:stringMyClass::name(){m_mutex.lock();stringtemp=m_name;m_mutex.unlock();returntemp;}版本2:stringMyClass::name(){MutexLockerlock(mutex);returnm_name;}我知道版本1没有问题,但我需要敲更多的代码。问题是,我不确定版本2是否正确。是否会在线程访问m_name之前释放互斥锁? 最佳答案

C++ STL make_heap 和 pop_heap 不工作

我需要使用堆,所以我搜索了STL,但它似乎不起作用,我写了一些代码来解释我的意思:#include#include#include#includestructdata{intindice;inttamanho;};boolcomparator2(constdata*a,constdata*b){return(a->tamanhotamanho);}intmain(){std::vectormesas;datax1,x2,x3,x4,x5;x1.indice=1;x1.tamanho=3;x2.indice=2;x2.tamanho=5;x3.indice=3;x3.tamanho=2;

C++ -- STL Vector::const_iterator 为什么不使用 < xx.end()?

//displayvectorelementsusingconst_iteratorfor(constIterator=integers.begin();constIterator!=integers.end();++constIterator)cout我们可以使用constIterator吗??谢谢 最佳答案 operator仅为randomaccessiterators定义。例如,这些由std::vector提供。和std::string,本质上是将数据存储在连续存储中的容器,其中迭代器通常只不过是包装指针。提供的迭代器,例如s

c++ - 调用删除时 STL 迭代器失效的问题

STL标准定义当删除发生在诸如std::deque、std::list等容器上时,迭代器将失效。我的问题如下,假设包含在std::deque中的整数列表,以及一对指示std::deque中元素范围的索引,删除所有偶数元素的正确方法是什么?到目前为止,我有以下内容,但这里的问题是假定的结束在删除后无效:#include#includeintmain(){std::dequedeq;for(inti=0;ir(10,50);std::deque::iteratorit=deq.begin()+r.first;std::deque::iteratorend=deq.begin()+r.sec

C++ STL : Using map with priority_queue

我正在尝试通过将字母及其对应值保存到映射中然后将该映射插入到优先级队列中来实现霍夫曼编码。当我尝试声明我的队列时出现参数转换错误。我到底应该把什么作为参数?我这里有的是我最好的猜测。voidmain(){ifstreamdoc("doc.txt");mapC;charletter;while(!doc.eof()){doc.get(letter);if(letter>='a'&&letter,greater>Q(C);//alsotriedgreater>/*map::const_iteratorit;for(it=C.begin();it!=C.end();it++)coutfirs